package com.baoyouqun.API.sms;

import com.alibaba.cola.dto.SingleResponse;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

@Slf4j
@Service
public class SmsBatchService {
    @Resource
    private SmsProperties smsProperties;

    @Resource
    private AliyunSmsClient aliyunSmsClient;

    /**
     * 批量发送模板短信（带发送限制控制）
     *
     * @param phoneNumbers   手机号列表
     * @param templateCode   模板ID
     * @param templateParams 模板参数列表（与手机号一一对应）
     * @param operatorId     操作人ID
     * @return 发送结果
     */
    @Transactional(rollbackFor = Exception.class)
    public SingleResponse batchSendTemplateSms(
            List<String> phoneNumbers,
            String templateCode,
            List<Map<String, String>> templateParams,
            String operatorId) {

        // 1. 过滤无效手机号
        List<String> validPhones = phoneNumbers.stream()
                .filter(this::isValidPhone)
                .collect(Collectors.toList());
        if (validPhones.isEmpty()) {
            return SingleResponse.buildFailure("10412", "没有有效的手机号可发送");
        }

        // 2. 检查批量发送限制（可根据业务需求扩展）
        if (validPhones.size() > 100) {
            // 超过100条时分批处理
            for (int i = 0; i < validPhones.size(); i += 100) {
                int end = Math.min(i + 100, validPhones.size());
                List<String> batchPhones = validPhones.subList(i, end);
                List<Map<String, String>> batchParams = templateParams != null
                        ? templateParams.subList(i, end)
                        : null;
                // 执行分批发送
                doBatchSend(batchPhones, templateCode, batchParams);
            }
            return SingleResponse.of("批量发送任务已启动（分批次处理）");
        } else {
            // 单次发送
            return doBatchSend(validPhones, templateCode, templateParams) ?
                    SingleResponse.of(" 批量发送成功") : SingleResponse.buildFailure("10412", "批量发送失败");
        }
    }

    /**
     * 执行单次批量发送（不超过100条）
     */
    private boolean doBatchSend(
            List<String> phones,
            String templateCode,
            List<Map<String, String>> params) {
        try {
            // 使用配置中的签名（如果需要多签名可从参数传入）
            List<String> signNames = phones.stream()
                    .map(phone -> smsProperties.getSignName())
                    .collect(Collectors.toList());

            // 调用阿里云批量发送接口
            AliyunSmsClient.BatchSmsResult result = aliyunSmsClient.sendBatchSms(
                    phones,
                    signNames,
                    templateCode,
                    params
            );

            // 记录发送日志（根据业务需求实现）
            if (result.isSuccess()) {
                // 保存成功记录
                log.info("批量发送成功，bizId: {}", result.getBizId());
            } else {
                log.error("批量发送失败: {}", result.getMessage());
            }
            return result.isSuccess();
        } catch (Exception e) {
            log.error("批量发送异常", e);
            return false;
        }
    }

    // 已有的其他方法不变...
    private boolean isValidPhone(String phone) {
        return phone != null && phone.matches("^1[3-9]\\d{9}$");
    }
}